home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MacFormat España 15
/
macformat_15.iso
/
C de cerca
/
Ejemplos
/
Capítulo 2
/
CdeCerca.c
< prev
Wrap
C/C++ Source or Header
|
1996-02-24
|
8KB
|
251 lines
/*****************************************************************/
/*
C de Cerca 2
Funciones, parámetros y texto en el Mac
Rafael Escoté - Enric Herrera
BlauSoft S.L. para MacFormat España - 1996
La descripción del código y la información sobre cómo preparar
el entorno de programación y generar estos programas, está contenida
en el ejemplar de MacFormat que los acompaña.
*/
/*****************************************************************/
/**************************************************************** */
/* PROTOTIPOS DE LAS FUNCIONES QUE HEMOS CREADO */
/* PARA NUESTRO PROGRAMA */
/**************************************************************** */
void main(void); /* Esta función NO puede tener otro nombre */
void MF_InitToolbox (void);
void MF_AbreMiVentana (void);
void MF_EscribeTexto (short codigo);
void MF_bucle_principal(void);
/**************************************************************** */
/* CONSTANTES Y VARIABLES GLOBALES */
/* RELACIONADAS CON LA VENTANA QUE ABRIREMOS */
/**************************************************************** */
/* La ventana que abriremos será creada dinámicamente por medio de
la función NewWindow() que nos devolverá un puntero a la estructura de
la nueva ventana, Declaramos pues, una variable adecuada... */
WindowPtr gMiVentana = nil;
/*--------------------------------------------------------------------*/
/* A PARTIR DE ESTE PUNTO, APARECE EL CODIGO DE LAS FUNCIONES CREADAS
ESPECIFICAMENTE PARA ESTE PROGRAMA. */
/*--------------------------------------------------------------------*/
/**************************************************************** */
/* main() */
/**************************************************************** */
/*
Todos los programas en C poseen una función que debe llamarse main.
Cuando un programa se pone en marcha, lo hace SIEMPRE ejecutando
en primer lugar la función main().
Es el punto de entrada a nuestra aplicación.
Recibe: nada
Que hace: Llama otras funciones que preparan la aplicación...
Salida: void (nada)
*/
void main (void)
{
/* Antes de hacer nada, debemos inicializar la Toolbox del Mac */
/* Como sea que el procedimiento a seguir para inicializar la Toolbox */
/* es casi siempre el mismo, hemos creado una función MF_InitToolbox()*/
/* que contiene las llamadas estándar de inicialización */
MF_InitToolbox();
/* Ahora empleamos una función que se encargará de abrir una ventana */
MF_AbreMiVentana();
/* Una vez abierta la ventana, podemos escribir algo de texto en ella */
MF_EscribeTexto(0);
/* Y ya podemos entrar en el bucle principal, que se encargará de
recoger e interpretar las acciones del usuario */
MF_bucle_principal();
/* Cuando el bucle principal haya terminado, será porque el usuario
desea acabar el programa.
Debemos liberar la memoria ocupada por nuestra ventana. */
DisposeWindow(gMiVentana);
/* Y ya está, al acabarse la función main(), el Sistema cerrará
nuestra aplicación de forma automática */
} /* Fin de main() y del programa */
/**************************************************************** */
/* MF_bucle_principal */
/**************************************************************** */
/*
Recibe: nada
Que hace: Entra en un bucle y espera que se produzca una acción
Según cual sea esta, reacciona llamando una de las funciones que
hemos creado en esta demo.
Salida: nada
*/
void MF_bucle_principal(void)
{
short contador = 1; /* declaramos e inicializamos una variable
que nos servirá para contar las veces que
ejecutaremos la función MF_EscribeTexto()
*/
long dummy; /* Una variable long que la función Delay() requiere */
/* Mientras contador sea menor o igual a 3 */
while(contador <= 3)
{
while (Button() == 0)
; /* Nos paramos a esperar que sea pulsado el ratón
Button() es una función que devuelve el valor 0 si el botón
del ratón no está pulsado */
MF_EscribeTexto(contador); /* OK. Han pulsado el botón
Ejecutamos la función MF_EscribeTExto()
pasandole el valor de contador.
La primera vez será = 1, luego 2 etc... */
Delay(30,&dummy); /* Delay() es una función del Mac que detiene
todo proceso durante el tiempo indicado en
su primer parámetro. Las unidades empleadas
son 1/60" seg.
Así pues, 30 equivale a medio segundo de espera */
contador = contador+1;/* Ahora incrementamos el contador sumándole 1.*/
} /* fin del bucle while(contador <= 3) */
Delay(60,&dummy); /* Un poco más de espera (1 segundo en este caso) */
} /* Fin de la función MF_bucle_principal() */
/**************************************************************** */
/* MF_InitToolbox */
/**************************************************************** */
/*
Inicializa la Toolbox Macintosh. El orden de llamada a las diversas
rutinas es significativo! No lo cambie.
Recibe: nada
Cambia: nada en la aplicación
Salida: nada
*/
void MF_InitToolbox (void)
{
InitGraf(&qd.thePort);
InitFonts();
FlushEvents(everyEvent,0);
InitWindows();
InitMenus();
TEInit();
InitDialogs(0L);
InitCursor();
} /* Fin de MF_InitToolbox() */
/**************************************************************** */
/* MF_AbreMiVentana */
/**************************************************************** */
/*
Abre la ventana (la única) de nuestro programa. Las funciones empleadas
y el significado de los parámetros que utilizamos se comentarán en posteriores
versiones de esta aplicación.
Recibe: nada
Que hace: Crea una ventana...
Salida: void (nada)
*/
void MF_AbreMiVentana(void)
{
/* Declaración e inicialización de una variable de tipo Rect */
Rect miRectangulo = { 48, 8,108, 300 };
gMiVentana = NewWindow( nil,
&miRectangulo,
"\pC de Cerca - 2",
true,
documentProc,
(WindowPtr)-1L,
false,
nil);
if(gMiVentana == nil)
ExitToShell(); /* Si la creación de la ventana falla,
posiblemente sea debido a falta de memoria libre
Lo más aconsejable es salir de la aplicación */
} /* Fin de MF_AbreMiVentana() */
/****************************************************************/
/* MF_EscribeTexto */
/****************************************************************/
/*
Dibuja en nuestra ventana un texto.
Recibe: Un valor (short) que se emplea en una expresión condicional
de tipo switch/case, para determinar qué texto escribir.
Cambia: Borra los contenidos de la ventana y escribe un texto.
Salida: nada
*/
void MF_EscribeTexto(short codigo)
{
SetPort(gMiVentana); /* Antes de dibujar o escribir nada, debemos */
/* indicar al Sistema en que ventana deseamos */
/* hacerlo */
EraseRect(&gMiVentana->portRect); /* Borramos los contenidos */
MoveTo(10,30); /* Y ajustamos la posición inicial */
/* en la que vamos a escribir */
/* Una expresión condicional del tipo switch...case */
switch(codigo)
{
/* Según el valor del parámetro recibido (codigo) */
/* se ejecutará una (y sólo una) de las siguientes opciones. */
/* De hecho, se ejecuta el código comprendido entre las sentencias */
/* case y break */
case 0: /* Por ejemplo, si código = 0 */
DrawString("\pPulse el botón del ratón..."); /* <-- se ejecuta esto */
break; /* y el programa 'salta' hasta el final del switch */
case 1:
DrawString("\pSwitch-case nº 1. Pulse otra vez...");
break;
case 2:
DrawString("\pSwitch-case nº 2. Pulse una vez más...");
break;
case 3:
DrawString("\pSwitch-case nº 3. Esta ha sido la última...");
break;
default:
DrawString("\pMacFormat. C de Cerca nº 2");
break;
} /* Fin de switch(codigo) */
}/* Fin de MF_EscribeTexto() */